package com.cmc.cloud.cmclink.doc.api.document;

import com.cmc.cloud.cmclink.doc.api.document.rep.VgmCreateReqDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.VgmEdiRespDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.VgmRespDto;
import com.cmc.cloud.cmclink.doc.api.document.rep.VgmUpdateReqDto;
import com.cmc.cloud.cmclink.doc.api.document.req.*;
import com.cmc.cloud.cmclink.doc.api.document.req.si.VgmQueryInfoDto;
import com.cmc.cloud.cmclink.doc.constant.DocApiConstants;
import com.cmes.framework.common.pojo.CommonResult;
import com.cmes.framework.common.pojo.PageResult;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;

import javax.validation.Valid;
import java.util.List;

/**
 * @author lzp
 */
@FeignClient(name = DocApiConstants.NAME)
@Tag(name = "RPC - 服务 vgm信息查询")
@Validated
public interface VgmRequestApi {
    String PREFIX = DocApiConstants.PREFIX + "/vgm";



    /**
     * 查询vgm数据信息 edi
     *
     * @param vgmQueryEdiDto
     * @return
     */
    @PostMapping(PREFIX + "/query/edi")
    @Operation(summary = "VGM信息查询")
    CommonResult<List<VgmRespDto>> getVgmInfoByEdi(@Valid @RequestBody VgmQueryEdiDto vgmQueryEdiDto);

    /**
     * 分页查询vgm数据信息 网厅
     *
     * @param vgmQueryDto
     * @return
     */
    @PostMapping(PREFIX + "/page")
    @Operation(summary = "vgm信息分页查询")
    CommonResult<PageResult<VgmRespDto>> pageVgmInfo(@Valid @RequestBody VgmPageReqDto vgmQueryDto);

    /**
     * 查询vgm数据信息 网厅
     *
     * @param vgmQueryDto
     * @return
     */
    @PostMapping(PREFIX + "/query")
    @Operation(summary = "VGM信息查询")
    CommonResult<List<VgmRespDto>> getVgmInfo(@Valid @RequestBody VgmQueryDto vgmQueryDto);

    /**
     * 批量箱号查询vgm数据信息 网厅
     *
     * @param vgmQueryDto 请求
     * @return 返回
     */
    @PostMapping(PREFIX + "/list")
    @Operation(summary = "VGM信息查询(批量箱号)")
    CommonResult<List<VgmRespDto>> getVgmByCntrNos(@Valid @RequestBody VgmQueryInfoDto vgmQueryDto);

    /**
     * 批量提单号查询vgm数据信息 网厅
     *
     * @param blnos 请求
     * @return 返回
     */
    @GetMapping(PREFIX + "/list")
    @Operation(summary = "VGM信息查询(批量提单号)")
    CommonResult<List<VgmRespDto>> getVgmByBlnos(@RequestParam("blnos") List<String> blnos);

    /**
     * 查询VGM详情 网厅
     *
     * @param vgmId 请求
     * @return 返回
     */
    @GetMapping(PREFIX + "/list/{vgmId}")
    @Operation(summary = "查询VGM详情")
    CommonResult<VgmRespDto> getVgmDetail(@PathVariable("vgmId")Long vgmId);

    /**
     * vgm数据导入 网厅
     *
     * @param vgmImportReqDtoList
     * @param vesselCode
     * @param voyage
     * @param port
     * @return
     */
    @Operation(summary = "导入VMG信息,要成功全成功要失败全失败")
    @PostMapping(PREFIX + "/import/{vesselCode}/{voyage}/{port}")
    @Parameters({
            @Parameter(name = "vesselCode", description = "船名", required = true),
            @Parameter(name = "voyage", description = "航次", required = true),
            @Parameter(name = "port", description = "港口", required = true)
    })
    CommonResult<List<VgmImportReqDto>> importVgm(@Valid @RequestBody List<VgmImportReqDto> vgmImportReqDtoList,
                                                  @PathVariable(name = "vesselCode") String vesselCode,
                                                  @PathVariable(name = "voyage") String voyage,
                                                  @PathVariable(name = "port") String port);

    /**
     * VGM创建 网厅
     *
     * @param vgmCreateReqDto
     * @return
     */
    @Operation(summary = "创建VMG信息")
    @PostMapping(PREFIX + "/create")
    CommonResult<Void> createVgm(@Valid @RequestBody VgmCreateReqDto vgmCreateReqDto);

    /**
     * 更新vgm 网厅
     *
     * @param vgmUpdateReqDto
     * @return
     */
    @Operation(summary = "更新VMG信息")
    @PostMapping(PREFIX + "/update")
    CommonResult<Void> updateVgm(@Valid @RequestBody VgmUpdateReqDto vgmUpdateReqDto);

    /**
     * 删除vgm 网厅
     *
     * @param id
     * @param creator
     * @return
     */
    @Operation(summary = "删除VMG信息个人删除个人的")
    @PostMapping(PREFIX +"/delete/{id}/{creator}")
    CommonResult<Void> deleteVgm(@PathVariable("id") Long id, @PathVariable("creator") String creator);

    /**
     * EDI更新VGM信息
     *
     * @param vgmEdiReqAllDto
     * @return
     */
    @Operation(summary = "EDI创建和更新VGM信息")
    @PostMapping(PREFIX +"/updateVgmEdi")
    CommonResult<VgmEdiRespDto> updateVgmEdi(@Valid @RequestBody VgmEdiReqAllDto vgmEdiReqAllDto);
}
